package com.tarena.lbs.activity.service;

import com.tarena.lbs.activity.pojo.param.ActivityAddParam;
import com.tarena.lbs.activity.pojo.param.ActivityUpdateStatusParam;
import com.tarena.lbs.activity.pojo.po.ActivityPO;
import com.tarena.lbs.activity.pojo.query.ActivityQuery;
import com.tarena.lbs.activity.pojo.vo.ActivityVO;
import com.tarena.lbs.base.protocol.pager.PageResult;
import com.tarena.lbs.base.protocol.exception.BusinessException;

import java.text.ParseException;
import java.util.List;

public interface ActivityService {

    /**
     * 分页查询活动列表
     * @param query 查询参数
     * @return 活动列表分页结果
     */
    PageResult<ActivityVO> pageList(ActivityQuery query) throws BusinessException;

    /**
     * 保存活动信息
     * @param param 活动参数
     */
    void saveActivity(ActivityAddParam param) throws ParseException, BusinessException;

    /**
     * 根据ID查询活动详情
     * @param id 活动ID
     * @return 活动详情
     */
    ActivityVO getActivityById(Long id) throws BusinessException;

    /**
     * 检查用户是否满足活动目标人群范围
     * @param userId 用户ID
     * @param activityId 活动ID
     * @return true表示满足，false表示不满足
     */
    Boolean activityVisible(Integer userId, Long activityId);

    /**
     * 转换活动PO对象为VO对象
     * @param activityPO 活动PO对象
     * @return 活动VO对象
     */
    ActivityVO convertToVO(ActivityPO activityPO);

    /**
     * 转换活动添加参数为PO对象
     * @param param 活动添加参数
     * @return 活动PO对象
     */
    ActivityPO convertToPO(ActivityAddParam param) throws ParseException;
    
    /**
     * 启用/禁用活动
     * @param id 活动ID
     * @param enableStatus 启用状态（0：禁用，1：启用）
     */
    void enableActivity(Long id, Integer enableStatus) throws BusinessException;

    List<ActivityPO> getActivityListByStoreId(Integer storeId);

}
